﻿
Public Class FrmSalidaProducto

    Private Sub FrmSalidaProducto_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        dgPedidoDetalle.AutoGenerateColumns = False
        dgMovDetalle.AutoGenerateColumns = False
        dgProductoDetalle.AutoGenerateColumns = False

        llenarDepositos()
        llenarSecciones()
        txtNroPedido.Focus()

        CargarMovimiento()
    End Sub

    Dim facturas As New Class_RC_Controller.rc_Facturas
    Dim controller As New Class_RC_Controller.rc_Movimientos

    Private _codVenta As Integer = 0

    Public Property codVenta() As Integer
        Get
            Return _codVenta
        End Get
        Set(value As Integer)
            _codVenta = value
        End Set
    End Property

    Private _codMovimiento As Integer = 0

    Public Property codMovimiento() As Integer
        Get
            Return _codMovimiento
        End Get
        Set(value As Integer)
            _codMovimiento = value
            txtNroMovimiento.Text = value
        End Set
    End Property

    Private Sub llenarDepositos()

        Dim ds As DataTable
        ds = controller.get_Depositos_All(oiml.dbConn)
        With Me.cboDeposito
            .DataSource = ds
            .DisplayMember = "descripcionDep"
            .ValueMember = "codDeposito"
        End With

        llenarSecciones()

    End Sub

    Private Sub llenarSecciones()
        If IsNumeric(cboDeposito.SelectedValue) Then
            If cboDeposito.SelectedValue > 0 Then
                Dim ds As DataTable
                ds = controller.get_SeccionesDepositos_All(oiml.dbConn, cboDeposito.SelectedValue)
                If Not ds Is Nothing Then

                    With Me.cboSeccion
                        .DataSource = ds
                        .DisplayMember = "descripcionSeccion"
                        .ValueMember = "codSeccion"
                    End With

                Else
                    cboSeccion.DataSource = Nothing

                End If

                CargarProductosDetalles()

            End If

        End If

    End Sub

    Private Sub CargarMovimiento()
        Try
            If codMovimiento > 0 Then

                Dim ds As New DataTable
                ds = controller.get_Movimientos_ByID(oiml.dbConn, codMovimiento)

                If Not ds Is Nothing Then

                    ' cargar los controles del formulario con los valores de los campos del registro
                    codVenta = ds.Rows(0)("codVenta").ToString
                    CargarVenta()

                    cboDeposito.SelectedValue = ds.Rows(0)("codDeposito").ToString
                    cboSeccion.SelectedValue = ds.Rows(0)("codSeccion").ToString
                    dtpFechaMov.Value = DateTime.Parse(ds.Rows(0)("fechaMov").ToString)

                    Me.lblUsuario.Text = ds.Rows(0)("usuario").ToString
                    Me.lblfechaActualizacion.Text = ds.Rows(0)("fechaActualizacion_").ToString

                    CargarDetalles()

                    'btnMovConfirma.Enabled = False
                    btnBuscarPedido.Enabled = False
                    btnCancelarPedido.Enabled = False
                    txtNroPedido.ReadOnly = True
                    cboDeposito.Enabled = False
                    cboSeccion.Enabled = False
                    dtpFechaMov.Enabled = False

                End If

            Else

                ' cargar los controles del formulario con los valores de los campos del registro
                codVenta = 0
                lblUsuario.Text = oiml.Usuario
                lblfechaActualizacion.Text = Date.Now.ToShortDateString
                txtNroPedido.Focus()

            End If

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Private Sub btnBuscarPedido_Click(sender As System.Object, e As System.EventArgs) Handles btnBuscarPedido.Click
        Dim frmBuscador As New BuscFactura
        frmBuscador.conSaldo = False
        frmBuscador.conProductoSaldo = True
        frmBuscador.nroFactura = txtNroPedido.Text

        'If cbxEstado.Checked Then
        '    frmBuscador.pEstado = cboEstado.Text
        'End If

        frmBuscador.ShowDialog()
        codVenta = frmBuscador.codFactura
        CargarVenta()

    End Sub

    Private Sub btnMovConfirma_Click(sender As System.Object, e As System.EventArgs) Handles btnMovConfirma.Click
        Try
            Dim dt As New DataTable
            dt = facturas.get_Ventas_ByID(oiml.dbConn, codVenta)

            If Not dt Is Nothing And dt.Rows.Count > 0 Then
                codVenta = dt.Rows(0)("codVenta").ToString

                Dim dtDetalle As New DataTable
                dtDetalle = facturas.get_Ventas_Detalles_All(oiml.dbConn, codVenta, True, True)

                If Not dtDetalle Is Nothing Then

                    If dtDetalle.Rows.Count = 0 Then
                        Exit Sub
                    End If

                    If MessageBox.Show("Desea confirmar la salida por la factura nro. " & txtNroPedido.Text & "?", "Facturas", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

                        If codMovimiento = 0 Then
                            codMovimiento = controller.Insert_Movimiento(oiml.dbConn, 0, codVenta, dtpFechaMov.Value, cboSeccion.SelectedValue, "SALIDA", oiml.idUsuario, oiml.idUsuario)
                        End If

                        Dim codProducto As Integer
                        Dim cantidad As Integer

                        If codMovimiento > 0 Then

                            If dgPedidoDetalle.SelectedRows.Count > 0 Then
                                codProducto = dgPedidoDetalle.SelectedRows(0).Cells(4).Value
                                cantidad = Integer.Parse(dgPedidoDetalle.SelectedRows(0).Cells(3).Value)

                                If Not controller.Insert_Movimientos_Detalle(oiml.dbConn, codMovimiento, codProducto, cantidad, "SALIDA", cboSeccion.SelectedValue, cboDeposito.SelectedValue) Then
                                    MessageBox.Show("Error: " & controller.MessageError.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                                    Exit Sub
                                End If

                            End If

                            'For i As Integer = 0 To dtDetalle.Rows.Count - 1

                            '    codProducto = dtDetalle.Rows(i)("codProducto")
                            '    cantidad = dtDetalle.Rows(i)("cantidad")

                            '    If Not controller.Insert_Movimientos_Detalle(oiml.dbConn, codMovimiento, codProducto, cantidad, "SALIDA") Then
                            '        MessageBox.Show("Error: " & controller.MessageError.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                            '        Exit Sub
                            '    End If

                            'Next

                            CargarMovimiento()
                            MessageBox.Show("Registro grabado con exito!", "Salida de productos", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                            'Me.Close()
                        Else

                            If Not controller.MessageError Is Nothing Then
                                MessageBox.Show("Error: " & controller.MessageError.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                            End If

                        End If

                    End If

                End If

            Else

                'MessageBox.Show("Pedido no encontrado o ya ha sido ingresado.", "Pedidos", MessageBoxButtons.OK, MessageBoxIcon.Information)

            End If

        Catch ex As Exception

            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Private Sub CargarProductosDetalles()
        Dim codProducto As Integer
        If dgPedidoDetalle.SelectedRows.Count > 0 Then
            codProducto = dgPedidoDetalle.SelectedRows(0).Cells(4).Value

            If codProducto > 0 Then

                Dim dt As New DataTable
                dt = controller.get_Productos_Saldo_ByID(oiml.dbConn, codProducto, cboDeposito.SelectedValue, cboSeccion.SelectedValue)
                If Not dt Is Nothing Then
                    dgProductoDetalle.DataSource = dt

                Else
                    dgProductoDetalle.DataSource = Nothing

                End If

            Else
                dgProductoDetalle.DataSource = Nothing

            End If

        Else
            dgProductoDetalle.DataSource = Nothing

        End If

    End Sub

    Private Sub CargarDetalles()
        If codMovimiento > 0 Then

            Dim dt As New DataTable
            dt = controller.get_Movimientos_Detalles(oiml.dbConn, codMovimiento)
            If Not dt Is Nothing Then
                dgMovDetalle.DataSource = dt

            End If

        End If

    End Sub

    Private Sub CargarDetalles_Factura()
        If codVenta > 0 Then

            Dim dt As New DataTable
            dt = facturas.get_Ventas_Detalles_All(oiml.dbConn, codVenta, True, True)
            If Not dt Is Nothing Then
                dgPedidoDetalle.DataSource = dt

                If dt.Rows.Count > 0 Then
                    dgPedidoDetalle.Rows(0).Selected = True
                    CargarProductosDetalles()
                End If

            Else
                dgPedidoDetalle.DataSource = Nothing
                CargarProductosDetalles()
            End If

        End If

    End Sub

    Private Sub CargarVenta()
        Try
            If codVenta > 0 Then

                Dim ds As New DataTable
                ds = facturas.get_Ventas_ByID(oiml.dbConn, codVenta)

                If Not ds Is Nothing Then

                    ' cargar los controles del formulario con los valores de los campos del registro
                    codVenta = ds.Rows(0)("codVenta").ToString
                    txtPedidoDatos.Text = "Factura nro.: " & ds.Rows(0)("nroFactura").ToString & " - Fecha: " &
                        ds.Rows(0)("fecha_").ToString() & " - Cliente: " & ds.Rows(0)("cliente").ToString & " - " & ds.Rows(0)("ruc").ToString &
                        " - Estado: " & ds.Rows(0)("estadoVenta").ToString

                    Me.txtNroPedido.Text = ds.Rows(0)("nroFactura").ToString

                    CargarDetalles_Factura()

                Else
                    codVenta = 0
                    txtPedidoDatos.Text = ""
                    dgPedidoDetalle.DataSource = Nothing
                    'MessageBox.Show("El pedido seleccionado no ha sido finalizado o no posee productos para su ingreso!", "Deposito de productos", MessageBoxButtons.OK, MessageBoxIcon.Information)

                End If

            Else

                'cargar los controles del formulario con los valores de los campos del registro
                codVenta = 0
                txtPedidoDatos.Text = ""
                dgPedidoDetalle.DataSource = Nothing
                'MessageBox.Show("El pedido seleccionado no existe o no posee productos para su ingreso!", "Deposito de productos", MessageBoxButtons.OK, MessageBoxIcon.Information)

            End If

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Private Sub cboDeposito_SelectedValueChanged(sender As System.Object, e As System.EventArgs) Handles cboDeposito.SelectedValueChanged
        llenarSecciones()
    End Sub

    Private Sub btnSalir_Click(sender As System.Object, e As System.EventArgs) Handles btnSalir.Click
        Me.Close()
    End Sub

    Private Sub txtNroPedido_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles txtNroPedido.KeyDown
        If e.KeyCode = Keys.Enter Then
            btnBuscarPedido_Click(sender, e)
        End If
    End Sub

    Private Sub dgPedidoDetalle_CellClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgPedidoDetalle.CellClick
        CargarProductosDetalles()
    End Sub

    
    Private Sub cboSeccion_SelectedValueChanged(sender As System.Object, e As System.EventArgs) Handles cboSeccion.SelectedValueChanged
        CargarProductosDetalles()
    End Sub
End Class